맨위로가기

메사 (프로그래밍 언어)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

메사는 1970년대 초 제록스 PARC에서 개발된 프로그래밍 언어이다. 제록스 알토 워크스테이션과 파일럿 운영 체제를 위해 설계되었으며, 제록스 스타, 데이지, 데이 브레이크 등의 상업용 워크스테이션의 시스템 프로그래밍 언어로 사용되었다. 메사는 스택 머신 언어로 컴파일되어 높은 코드 밀도를 자랑했으며, GUI, 네트워킹, 예외 처리, 멀티 스레드 프로그래밍 등의 기술을 프로그래머에게 교육했다. 시더의 전신이며, 모듈라-2와 자바에도 영향을 미쳤다.

더 읽어볼만한 페이지

  • 제록스 - 제록스 스타
    제록스 스타는 1981년 제록스사에서 개발된 최초의 상업적 GUI 워크스테이션 시스템 중 하나로, 데스크톱 메타포, 아이콘, WYSIWYG 편집 등 혁신적인 사용자 인터페이스를 도입하여 현대 컴퓨터 환경에 큰 영향을 미쳤으나 상업적 성공을 거두지는 못했고, 후대 운영체제와 핵심 기술 발전에 기여했다.
  • 제록스 - 팰로앨토 연구소
    팰로앨토 연구소(PARC)는 제록스에 의해 설립되어 레이저 프린터, GUI, 이더넷 등 현대 컴퓨팅의 기반 기술을 개발했으며, 2002년 독립 법인으로 분사되었다가 2023년 SRI 인터내셔널에 기증되었다.
  • 병행 프로그래밍 언어 - 자바 (프로그래밍 언어)
    자바는 제임스 고슬링 등에 의해 개발된 객체 지향 프로그래밍 언어로, 다양한 플랫폼에서 실행 가능하며 샌드박스 모델 기반의 보안 기능, 자동 메모리 관리, 멀티스레딩 등을 지원한다.
  • 병행 프로그래밍 언어 - 스칼라 (프로그래밍 언어)
    스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다.
  • 시스템 프로그래밍 언어 - C (프로그래밍 언어)
    C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다.
  • 시스템 프로그래밍 언어 - 스위프트 (프로그래밍 언어)
    2014년 애플 세계 개발자 컨퍼런스에서 처음 공개된 스위프트는 크리스 래트너가 개발한 애플의 범용 프로그래밍 언어로서, Objective-C를 대체하며 다양한 플랫폼 지원, 모던 문법, 안정성, 인터랙티브한 개발 환경, SwiftUI 등의 특징을 가진다.
메사 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서
기본 정보
이름메사
설계자Computer Systems Laboratory (CSL)
개발자Xerox PARC
발표 연도1976년
최신 릴리스 버전Mesa 6.0 (Version 41)
최신 릴리스 날짜1981년 7월
자료형강한, 정적
영향을 준 언어ALGOL
영향을 받은 언어Java
Modula-2
Cedar
PostScript

2. 역사

메사(Mesa)는 1974년 제록스 팔로알토 연구소(PARC)에서 개발된 프로그래밍 언어이다. ALGOL 스타일의 언어로, 모듈화 프로그래밍을 강력하게 지원한다. 라이브러리 모듈은 인터페이스를 지정하는 정의 파일과 프로시저 구현을 담은 하나 이상의 프로그램 파일로 구성된다.[16] 메사 컴파일러는 import된 모든 요소에 대해 정적 타입 검사를 수행한다.

메사는 소프트웨어 예외 처리, 스레드 동기화, 증분 컴파일 등에서 혁신적인 기술을 도입했다.[17][18]

제록스 알토에서 개발되었으며,[14] 이후 Xerox Star 워크스테이션 및 GlobalView 데스크톱 환경의 시스템 프로그래밍에 사용되었다.[19]

2. 1. 초기 개발

메사는 원래 알토를 위해 제록스 팔로알토 연구소(PARC)의 컴퓨터 시스템 연구소(CSL)에서 설계되었다. 초기 메사의 사용은 PARC와 제록스가 알토를 기증한 몇몇 대학교에 한정되었다.[5]

2. 2. 상용 시스템 적용

메사는 이후 파일럿 운영 체제 개발에 사용되었으며, 제록스 8010 (제록스 스타, 데이지) 및 제록스 6085 (데이 브레이크)와 같은 제록스의 상업용 워크스테이션 시스템 프로그래밍 언어로 채택되었다.[5]

2. 3. 개발 환경 (XDE)

제록스 개발 환경(XDE)이라고 불리는 통합 개발 환경에서는 월드 스왑 기구를 사용하여 운영 체제 파일럿(Pilot)과 ViewPoint GUI 애플리케이션 모두를 디버깅할 수 있었다[20][21]。이를 통해 월드의 "상태" 전체를 스왑아웃하여 시스템 전체를 멈추는 저수준 시스템 충돌을 디버깅할 수 있었다. 이 기술은 대규모 애플리케이션 이미지(수 메가바이트)에는 잘 확장되지 못했다. 따라서 마이크로코드화된 워크스테이션은 점진적으로 폐지되었고, 기본적인 하드웨어 명령 세트를 위해 Mesa PrincOps 에뮬레이터를 실행하는 SPARC 워크스테이션과 인텔 PC가 채택되면서, 후기 릴리스에서는 파일럿/메사가 사용되지 않게 되었다.

2. 4. 코드 밀도

메사는 스택 머신 언어로 컴파일되었으며, 높은 코드 밀도(고수준 언어 문장당 약 4바이트)를 달성한 것으로 알려져 있다. 1981년에 발표된 논문에서, 제록스 시스템 개발부(당시는 PARC의 개발 부문)의 구현자들은 명령어 세트를 튜닝하고, 그 결과 얻어진 코드 밀도에 관한 논문을 발표했다.[22]

2. 5. 메사 프로그래밍 교육

제록스는 메사 프로그래밍 과정을 통해 GUI, 네트워킹, 예외 처리, 멀티스레드 프로그래밍의 기초 등 당시 첨단 기술을 교육했다. 프로그래머들은 "해크"라고 불리는 유용한 프로그램을 작성하며 교육을 마무리했는데, 그 예로 1988년에 작성된 BWSMagnifier가 있다. BWSMagnifier는 워크스테이션 화면 일부를 크기 조절 가능한 창과 변경 가능한 확대율로 확대할 수 있게 했다.[22]

2. 6. 시더(Cedar)로의 발전

제록스 내에서 메사는 시더(Cedar) 프로그래밍 언어로 대체되었다.[8][9] 1985년에 많은 메사 프로그래머와 개발자들이 제록스를 퇴직했는데, 그중에는 DEC 시스템즈 연구 센터에서 메사에서의 경험을 바탕으로 모듈라-2+와, 이후 모듈라-3의 설계에 참여한 사람도 있다.

3. 주요 특징

메사는 모듈화 프로그래밍을 강력하게 지원하는 ALGOL 스타일의 언어이다. 모든 라이브러리 모듈은 라이브러리 인터페이스를 정의하는 정의 파일과 인터페이스 내 프로시저 구현을 담은 하나 이상의 프로그램 파일, 이렇게 최소 두 개의 소스 파일로 구성된다.[16] 라이브러리를 사용하려면 프로그램이나 상위 레벨 라이브러리가 정의를 "import"해야 하며, 메사 컴파일러는 import된 모든 엔티티에 대해 정적 타입 검사를 수행한다.

메사는 언어 설계 및 구현, 특히 소프트웨어 예외 처리, 스레드 동기화, 증분 컴파일 등에서 몇 가지 혁신적인 기술을 도입했다.[17][18]

3. 1. 의미론(Semantics)

메사는 모듈 경계에서 타입 검사를 수행하는 강력한 형식 언어였지만, 힙 할당기를 메사로 작성할 수 있을 정도로 타입 시스템에 충분한 유연성을 가지고 있었다.[6][23]

인터페이스와 구현의 엄격한 분리로 인해 메사는 진정한 점진적 컴파일을 허용하며, 아키텍처 및 플랫폼 독립적인 프로그래밍을 장려했다. 또한 이더넷을 통한 원격 디버깅을 포함하여 디버깅을 간소화했다.[23]

메사는 네 가지 유형의 예외를 갖춘 풍부한 예외 처리 기능을 가지고 있었다. 모니터를 통한 스레드 동기화를 지원했다. 메사는 Pilot 운영 체제에서 도입된 개념인 모니터 BROADCAST를 구현한 최초의 언어였다.[7][24]

3. 2. 예외 처리(Exception Handling)

메사 설계자는 예외 처리를 구현하기를 원했을 때, 알고리즘 언어의 예외 처리 시설에 대한 논문을 쓴 콜로라도 출신의 석사 졸업생을 고용했다. 이로 인해 당시 가장 풍부한 예외 처리 시설이 생겨났으며, `SIGNAL`, `ERROR`, `ABORT`, `RETRY`, `CATCH`, 및 `CONTINUE`와 같은 기본 요소가 있었다.[1] 하지만 언어에 신호 처리에 대한 전체 범위를 확인하기 위한 형식 안전 검사가 없었기 때문에, 잡히지 않은 예외는 출시된 소프트웨어에서 버그의 일반적인 원인이었다.

3. 3. 스레드 동기화(Thread Synchronization)

메사는 모니터를 통한 스레드 동기화를 지원했다. 파일럿 운영 체제에서 도입된 모니터 `BROADCAST`를 구현한 최초의 언어이다.[24]

3. 4. 구문(Syntax)

메사는 ALGOL과 파스칼을 기반으로 하는 "명령형" 및 "대수적" 구문을 가지고 있으며, BCPL 또는 C와는 다르게 복합 명령을 중괄호 대신 `BEGIN` 및 `END` 키워드로 표시한다.[1] 모든 키워드는 대문자로 표기된다.[1]

PARC는 1963년 버전 ASCII를 사용했기 때문에, Alto의 문자 세트에는 밑줄 대신 왼쪽 화살표(←)가 포함되어 있었다. 그 결과, Alto 프로그래머(Mesa, Smalltalk 등을 사용하는 사람 포함)는 복합 식별자에 대해 관례적으로 camelCase를 사용했으며, 이는 PARC의 표준 프로그래밍 스타일에 통합되었다. 한편, 왼쪽 화살표는 할당 연산자에 사용되었다.

형 선언은 파스칼과 매우 유사하며, 기본형(INTEGER, CARDINAL, BOOLEAN, CHARACTER, LONG INTEGER, LONG CARDINAL, REAL), 열거형, 파생형, 배열형, 배열 기술자(동적 배열)형, 레코드형, 포인터형, 프로시저형 등이 있다.[25] Mesa는 정적 형식을 가진 언어이지만, 이를 회피하기 위한 UNSPECIFIED(1 워드의 무엇이든 들어갈 수 있는 형) 및 LOOPHOLE 내장 프로시저를 사용한 형 변환이 지원된다. 정의된 STRING형(레코드형에 대한 포인터)이 있다.

파스칼의 집합형은 없지만, 범위를 지정하는 연산자가 있으며, 범위 검사, SELECT의 선택지, FOR 루프의 조건 등에 사용할 수 있다.

할당, IF, SELECT 등은 문장으로도 식으로도 존재한다.

블록은 `BEGIN`과 `END`로 둘러싸여 있으며, ALGOL과 마찬가지로 그 안에서 변수 등을 선언할 수 있다. 이 외에 루프용 `DO..ENDLOOP`가 있다.

3. 5. 모듈(Modules)

모듈은 분할 컴파일의 단위이며, 인터페이스 모듈과 구현 모듈이 있어 서로 다른 모듈 간의 정적 타입 검사를 할 수 있게 되었다[21]。 어떤 프로그램에서 모듈을 사용할 경우, DIRECTORY 절을 통해 사용할 모듈을 지정한다.

실행 시에는 각 구현 모듈에 대해 프레임(인스턴스)이 생성된다. NEW를 사용하여 실행 시에 프레임의 복사본을 생성할 수도 있다[26]

3. 6. 병행 처리(Concurrency)

메사는 코루틴을 지원한다. PORT라는 형식이 있으며, 프로시저처럼 호출하여 프로시저 또는 모듈에서 제어를 이전할 수 있다.

또한 FORK를 사용하여 프로시저를 비동기적으로 실행할 수도 있다.

여러 프로세스의 상호 배제를 위해서는 모니터라는 모듈의 일종을 만들고, 그곳에서 조건 변수를 정의할 수 있다. 조건 변수는 NOTIFY함으로써 잠금이 걸리고, WAIT로 잠금이 해제된다.

4. Cedar

메사는 시더(Cedar) 프로그래밍 언어의 전신이었다.[8][9] 시더의 주요 추가 기능은 가비지 컬렉션, 동적 타입, 로프를 통한 더 나은 문자열 지원, 제한적인 형태의 타입 다형성 및 타입 안전 부분 식별을 위한 특수 구문으로, 다중 모듈 소프트웨어 패키지의 결정적 실행을 보장하고 메모리 누수를 방지하기 위한 것이었다.[27][28]

5. 영향 및 계승

메사는 이후 여러 프로그래밍 언어 및 시스템 개발에 큰 영향을 미쳤다. 주요 영향은 다음과 같다.


  • 다른 프로그래밍 언어에 미친 영향: 1976년, 제록스 PARC에서 안식년을 보내던 니클라우스 비르트는 메사에서 영감을 받아 Modula-2를 설계했다.[29] Java 역시 메사를 전신으로 명시적으로 언급한다.[30]
  • 미국 국방부의 Ada 채택: 미국 국방부는 "아이언맨" 프로그래밍 언어에 메사를 사용하도록 제안했지만, 제록스는 목표가 상충된다는 이유로 이를 거절했다. 제록스 PARC 직원들은 메사가 자사의 독점적 이점이라고 주장했다. 대신 국방부는 Ada를 선택했다.[29]
  • 상용 데스크톱 환경: 초기 스타 데스크톱은 뷰포인트 데스크톱으로 발전했고, 이후 GlobalView가 되어 SunOS 유닉스 및 AIX와 같은 다양한 유닉스 플랫폼으로 이식되었다. 그러나 Mesa에서 C로의 컴파일러를 작성하여 사용한 결과, 성능 문제로 인해 상업적 성공은 제한적이었다.[29]

5. 1. 미국 국방부의 Ada

미국 국방부는 "아이언맨" 프로그래밍 언어(스틸맨 언어 요구 사항 참조)에 메사를 사용하도록 제안했지만, 제록스는 목표가 상충된다는 이유로 이를 거절했다.[29] 제록스 PARC 직원들은 메사가 제록스 소프트웨어 엔지니어를 다른 회사의 엔지니어보다 더 생산적으로 만드는 독점적 이점이라고 주장했다.[29] 대신 국방부는 최종적으로 후보 중 Ada 프로그래밍 언어를 선택하고 개발했다.[29]

5. 2. 상용 데스크톱 환경

초기 스타 데스크톱은 뷰포인트 데스크톱으로 발전했고, 이후 GlobalView가 되어 SunOS 유닉스 및 AIX와 같은 다양한 유닉스 플랫폼으로 이식되었다. Mesa에서 C로의 컴파일러가 작성되었고, 결과 코드는 대상 플랫폼용으로 컴파일되었다. 이는 실행 가능한 솔루션이었지만, Mesa 컴파일러 및 관련 툴 체인의 성능이 이 접근 방식을 사용하면서 손실되어 유닉스 머신에서 개발하는 것이 거의 불가능해졌다. 출판 업계에서 Sun SPARC 워크스테이션에서 어느 정도 상업적 성공을 거두었지만, 이 접근 방식은 제품을 좁은 시장 기회로 고립시키는 결과를 낳았다.[29]

5. 3. Modula-2 및 Java

니클라우스 비르트는 1976년 제록스 PARC에서 안식년을 보내면서 메사를 접했고, 이는 그가 설계한 Modula-2 언어에 큰 영향을 주었다.[29] Java는 메사를 전신으로 명시적으로 언급하며,[30] 특히 모니터를 사용한 병행 처리는 메사에서 유래되었다.[31]

참조

[1] 간행물 "Mesa Language Manual - version 5.0" http://www.bitsavers[...] XEROX PARC, Computer Systems Laboratory (CSL) 1979
[2] 웹사이트 Mesa http://www.softwarep[...]
[3] 논문 'PostScript' prints anything: a case history 1988-05
[4] 문서 Mesa Language Manual
[5] 간행물 Empirical analysis of the mesa instruction set 1982-03
[6] 논문 Early Experience with Mesa 1977-08
[7] 논문 Experience with Processes and Monitors in Mesa http://research.micr[...] 1980-02
[8] 서적 A Description of the Cedar Language http://research.micr[...] Xerox PARC Technical Report
[9] 논문 The Structure of Cedar 1985-07
[10] 서적 Modula-2 and Oberon http://portal.acm.or[...]
[11] 서적 Java Language Specification http://java.sun.com/[...]
[12] 간행물 "Mesa Language Manual - version 5.0" http://www.bitsavers[...] XEROX PARC, Computer Systems Laboratory (CSL) 1979
[13] 웹사이트 Mesa http://www.softwarep[...]
[14] 문서 上谷(1986) p.261
[15] 논문 'PostScript' prints anything: a case history 1988-05
[16] 문서 Mesa Language Manual
[17] 문서 上谷(1986) pp.53-54
[18] 문서 ManualのAbstract
[19] 문서 上谷(1986) p.53
[20] 문서 上谷 (1986) p.270
[21] 문서 Sweet (1985) p.217
[22] 간행물 Empirical analysis of the Mesa instruction set http://dl.acm.org/ci[...] 1982-03
[23] 논문 Early Experience with Mesa 1977-08
[24] 논문 Experience with Processes and Monitors in Mesa http://research.micr[...] 1980-02
[25] 문서 上谷(1986) p.266
[26] 문서 上谷 (1986) pp.262-265
[27] 서적 A Description of the Cedar Language http://research.micr[...] Xerox PARC Technical Report
[28] 논문 The Structure of Cedar 1985-07
[29] 논문 Modula-2 and Oberon http://portal.acm.or[...]
[30] 서적 Java Language Specification http://java.sun.com/[...]
[31] 간행물 Java Language Specification, Java SE 8 Edition http://docs.oracle.c[...] Oracle
[32] 간행물 "Mesa Language Manual - version 5.0" http://www.bitsavers[...] XEROX PARC, Computer Systems Laboratory (CSL) 1979
[33] 웹사이트 Mesa http://www.softwarep[...]
[34] 저널 'PostScript' prints anything: a case history 1988-05



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com